首次啟動均一 Local server 與再啟動 with docker
先備技能
本機需要先安裝好 Docker,也需要先建立配備 google cloud sdk 的 docker image,還沒完成的話請參照前一篇:安裝 Local Server 的環境
操作步驟
- 新建並啟動 container
- 在 container build package
- 在 contener 中 auth 並運作 local server
- 連到 localhost:8080 以及 localhost:8000
- 結束 local server、離開 container
- 再次啟動 container
- 同場加映
- 指令介紹(如果你是均一工程師,強烈建議你讀懂這些指令)
- unit test / api test 的 docker container
1. 首次啟動 local server:新建並啟動 container
$ docker run -it -v ~/${Path To}/junyiacademy:/src -v ~/${Path To}/junyicontentservice:/content_src -v ~/${Path To}/work_resource:/work_resource \
-p 8080:8080 -p 8000:8000 --name appserver gcr.io/junyiacademy/dev/localserver:latest bash
請有意識的替換掉${Path To},再把指令貼到 Commend Line
~/${Path To}/junyiacademy: 請替換成你的 junyiacademy 資料夾路徑
~/${Path To}/workresource: 請替換成你放 db 的資料夾路徑(你放 db 的地方不一定叫 work_resource,請替換成你放 db 的地方)
看到下面的提示輸入即代表成功進入 docker container 環境了
root@dcdb54e27362:/#
2. 在 container 中 build package
root@dcbd54e27362:/# cd src
root@dcdb54e27362:/# npm install
root@dcdb54e27362:/# cd javascript/perseus-package
root@dcdb54e27362:/# npm install
root@dcdb54e27362:/# cd ..
root@dcdb54e27362:/# cd ..
root@dcdb54e27362:/# make build_js
3. 在 container 中 auth 並運作 local server
以下兩個 auth 都要跑,兩個指令 auth 的方式都是執行後會產生一個網址,將網址複製到瀏覽器候登入均一的 google 帳號認證,最後把瀏覽器顯示的認證碼貼回 terminal 即可
root@dcdb54e27362:/# gcloud auth login
root@dcdb54e27362:/# gcloud auth application-default login
兩個都認證完之後才可以用下面的指令運作 local server
請先進入 /src 資料夾
root@dcdb54e27362:/# /google-cloud-sdk/bin/dev_appserver.py --datastore_path=/work_resource/datastore.db \
--host=:: --admin_host=:: local_dispatch.yaml local_app.yaml /content_src/app.yaml -A junyiacademy --enable_host_checking=false --enable_console
4. 連到 http://localhost:8080
、 http://localhost:8000
確認 local server 可以正常連線
確認左上角「課程」選單中是有內容的。假如你抓的是 2016_PublishOK_db 這個檔案,使用 Google 登入應該會變成 Young 的帳號。
注意: 使用 2016_PublishOK_db 的話,資料是放在 junyiacademy 當中,若 app 改成 junyiacademytest1 是不會有資料的。
5. 結束 local server
關掉 local server:在 commend line 的地方按 control + c
停止 container,執行 exit 即可
root@dcdb54e27362:/# exit
6. 再次啟動 local server
先啟動 container ,接著執行一個 bash,就可以再次操作 container
$ docker start appserver
$ docker exec -it appserver bash
接著啟動 local server
root@dcdb54e27362:/# /google-cloud-sdk/bin/dev_appserver.py --datastore_path=/work_resource/datastore.db \
--host=:: --admin_host=:: local_app.yaml --enable_host_checking=false --enable_console
指令介紹
指令很長,分開來看:
docker run
是我們要跑的 docker 命令,所以如果想知道更完整的說明可以man docker run
-it -v ~/${Path To}/junyiacademy:/src -v ~/${Path To}/work_resource:/work_resource -p 8080:8080 --name appserver
是給docker run
的參數,詳細如下,其中第 2 步非常重要,請替換路徑
-it
包含兩個指令:分別是-t
與-i
-t
配置虛擬終端(pseudo-tty),以及-i
要容器的 stdin 保持打開(在foreground開啟),兩個選項經常一起下。指令中我們合併兩個指令,就變成
-it
。
-v
指定資料夾的映射(非常重要!!!!!)語法為
-v HOST-PATH:CONTAINER-PATH
,可以給零到多個。指令中的
~/${Path To}/junyiacademy
請替換成你的 junyiacademy 專案的路徑指令中的
~/${Path To}/work_resource
替換成你放置 datastore 的資料夾路徑。
-p
指定 port 映射,語法為
-v HOST-PORT:CONTAINER-PORT
,可以給零到多個。指令中映射的 8080 和 8000 為
dev_appserver.py
預設綁定的 port,把它轉出來,之後才能用http://localhost:8080
連到 local server。
--name
是給 container 一個易讀的名稱,在這邊我們取名為 appservergcr.io/junyiacademy/dev/localserver:latest
是指定 container 是基於哪一個 image 運作的最後的
bash
是要執行的指令,所以這行指令執行後,就會進入這個 container 的 bash,會看到類似下面的提示輸入
root@dcdb54e27362:/#
同場加映 unit test / api test 用的 docker container
對比第一個步驟,unit test / api test /deploy 不必 bind port,也不需要 datastore,所以指令相對簡潔
$ docker run -it -v ~/src/junyiacademy:/src --name test_deploy
進去後依樣要跑步驟 2 的兩個 auth,deploy 的話還要確認下面的指令看的到 version接著才能跑對應的指令。
appcfg.py list_versions . --noauth_local_webserver
- unit test:
make test
- api test:
make test_api
曾經發生過只 auth 一個,就直接跑 api test 失敗後,重新 auth 也無法跑 test,此時請砍掉 container 重來,方可解套
同場加映另一種配置: local 裝 gcloud 時 docker develop 環境 (非建議配置,選讀項目)
步驟 1-6 都是本機未安裝 gcloud sdk 的配置,接下來要介紹的是 local 安裝 gcloud sdk,且在 local auth,並將 credential 分享給 docker 的方法,請見下一頁